package classWork;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class Demo7 {
    /**
     * Stream流的收集方法 toMap 方法演示
     * <p>
     * 创建一个ArrayList集合，并添加以下字符串。字符串中前面是姓名，后面是年龄
     * "zhangsan,23"
     * "lisi,24"
     * "wangwu,25"
     * 保留年龄大于等于24岁的人，并将结果收集到Map集合中，姓名为键，年龄为值
     */
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,24");
        list.add("wangwu,25");

        /*
            toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)

            Function<T,R> 函数式编程接口: 接口中只有一个抽象方法.

            R apply (T t) :

                            作用: 转换

                            将参数中的 T 的类型, 转换为 R的类型进行返回.

                            T : 原始数据类型
                            R : 结果数据类型



         */

        Map<String, Integer> map = list.stream().filter(s -> {
            String[] sArr = s.split("\\,");
            int age = Integer.parseInt(sArr[1]);
            return age >= 24;
            // toMap : 转换的是Map集合, 就会涉及到, 键和值两个部分
        }).collect(
                Collectors.toMap(
                        new Function<String, String>() {
                            @Override
                            public String apply(String s) {
                                // "lisi,24"
                                String[] sArr = s.split("\\,");
                                return sArr[0];
                            }
                        },
                        new Function<String, Integer>() {
                            @Override
                            public Integer apply(String s) {
                                // "lisi,24"
                                String[] sArr = s.split("\\,");
                                int age = Integer.parseInt(sArr[1]);
                                return age;
                            }
                        }));

        System.out.println(map);

    }
}
